home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / langs / gfaxpert.lzh / GFAXPERT.LIB / MATH.LST < prev    next >
Encoding:
File List  |  1986-10-19  |  3.9 KB  |  138 lines

  1. ' ****************
  2. ' *** MATH.LST ***
  3. ' ****************
  4. '
  5. DEFWRD "a-z"
  6. '
  7. > PROCEDURE factorial(number,VAR fac#)
  8.   ' *** return factorial of number
  9.   ' *** global :  OVERFLOW!
  10.   LOCAL m$,n,k
  11.   IF number>449
  12.     PRINT CHR$(7);
  13.     m$="overflow ...| |maximum 449!|("+STR$(number)+"! not possible)"
  14.     ALERT 3,m$,1," OK ",k
  15.     overflow!=TRUE
  16.     fac#=0
  17.   ELSE
  18.     fac#=1
  19.     overflow!=FALSE
  20.     FOR n=1 TO number
  21.       MUL fac#,n
  22.     NEXT n
  23.   ENDIF
  24. RETURN
  25. ' **********
  26. '
  27. > PROCEDURE binomial.chance(number,chance#,n,VAR n.chance#)
  28.   ' *** two outcomes are possible (U1 en U2, e.g. heads and tails)
  29.   ' *** outcomes are tested a number of times (e.g. 100 coin tosses)
  30.   ' *** chance for outcome U1 is chance# (0-1; e.g. 0.5 for heads)
  31.   ' *** return chance for n U1-outcomes (e.g. 60 times heads)
  32.   ' *** uses Procedure Factorial
  33.   LOCAL comb#,n1#,n2#,n3#
  34.   @factorial(number,n1#)
  35.   @factorial(n,n2#)
  36.   @factorial(number-n,n3#)
  37.   comb#=(n1#/n2#)/n3#
  38.   n.chance#=comb#*((chance#)^n)*((1-chance#)^(number-n))
  39. RETURN
  40. ' **********
  41. '
  42. > PROCEDURE correlate(number,VAR proc1#(),proc2#(),cor#,sign!,a#,b#)
  43.   ' *** return correlation between numbers in arrays proc1#() and proc2#()
  44.   ' *** use elements with index 1 to number
  45.   ' *** also returns flag for significance of correlation and regression-line
  46.   '
  47.   LOCAL n,sum_xy#,sum_x#,sum_y#,sum_x2#,sum_y2#,numerator#,denominator#
  48.   CLR sum_xy#,sum_x#,sum_y#,sum_x2#,sum_y2#
  49.   '
  50.   IF NOT DIM?(cor_a#())
  51.     DIM cor_a#(32),cor_r#(32)
  52.     RESTORE cor_r_values
  53.     FOR n=1 TO 32
  54.       READ cor_a#(n),cor_r#(n)
  55.     NEXT n
  56.   ENDIF
  57.   '
  58.   FOR n=1 TO number
  59.     sum_xy#=sum_xy#+proc1#(n)*proc2#(n)
  60.     sum_x#=sum_x#+proc1#(n)
  61.     sum_y#=sum_y#+proc2#(n)
  62.     sum_x2#=sum_x2#+proc1#(n)*proc1#(n)
  63.     sum_y2#=sum_y2#+proc2#(n)*proc2#(n)
  64.   NEXT n
  65.   numerator#=sum_xy#-(sum_x#*sum_y#)/number
  66.   denominator#=SQR((sum_x2#-(sum_x#*sum_x#)/number)*(sum_y2#-(sum_y#*sum_y#)/number))
  67.   cor#=numerator#/denominator#
  68.   '
  69.   FOR n=1 TO 32
  70.     EXIT IF number<=cor_a#(n)
  71.   NEXT n
  72.   IF ABS(correlatie#)<cor_r#(n)
  73.     sign!=FALSE                  ! correlation not significant (90 %)
  74.   ELSE
  75.     sign!=TRUE                   ! significant correlation (90 %)
  76.   ENDIF
  77.   '
  78.   denominator#=sum_x2#-(sum_x#*sum_x#)/number
  79.   a#=numerator#/denominator#                    ! regression-line : y = ax + b
  80.   b#=sum_y#/number-a#*(sum_x#/number)
  81.   '
  82.   cor_r_values:
  83.   DATA 3,.988,4,.9,5,.805,6,.729,7,.669,8,.622,9,.582,10,.55,11,.524,12,.497
  84.   DATA 13,.476,14,.458,15,.441,16,.426,17,.421,18,.4,19,.389,20,.378,21,.369
  85.   DATA 22,.36,24,.344,26,.33,28,.317,30,.306,35,.275,40,.264,50,.235,60,.214
  86.   DATA 70,.195,80,.185,90,.173,100,.165,0
  87. RETURN
  88. ' **********
  89. '
  90. > PROCEDURE ggd(x%,y%,VAR ggd%)
  91.   ' ** bepaal grootste gemene deler van twee getallen (algoritme van Euclides)
  92.   LOCAL x2%,y2%,rest%
  93.   x2%=x%
  94.   y2%=y%
  95.   REPEAT
  96.     rest%=MOD(x2%,y2%)
  97.     x2%=y2%
  98.     y2%=rest%
  99.   UNTIL rest%=0
  100.   ggd%=x2%
  101. RETURN
  102. ' **********
  103. '
  104. > PROCEDURE piechart(VAR n())
  105.   ' *** positive numbers in word-array are represented as percentage in piechart
  106.   ' *** High resolution only
  107.   ' *** uses Standard Globals
  108.   LOCAL n.max,i,sum,p.end#,p.start#,ps#,pu#,psa#
  109.   CLR sum,psa#,p.start#
  110.   n.max=DIM?(n())-1
  111.   FOR i=1 TO n.max
  112.     ADD sum,n(i)
  113.   NEXT i
  114.   ERASE n.fract#()
  115.   DIM n.fract#(n.max)
  116.   FOR i=1 TO n.max
  117.     n.fract#(i)=n(i)/sum*2*PI          !  2*PI = 100 %
  118.   NEXT i
  119.   FOR i=1 TO n.max
  120.     p.end#=p.start#+n.fract#(i)*57.3
  121.     DEFFILL 1,2,i                      ! new Fill-pattern (max. 24)
  122.     PELLIPSE 320,180,300,150,10*p.start#+2700,10*p.end#+2700
  123.     p.start#=p.end#
  124.   NEXT i
  125.   DEFTEXT ,,,13
  126.   FOR i=1 TO n.max
  127.     ps#=psa#+n.fract#(i)
  128.     pu#=0.5*(ps#+psa#)
  129.     x#=70*SIN(pu#)+54
  130.     y#=25*COS(pu#)+34
  131.     '    PRINT AT(x#/2+14,y#/3+1);n(i)
  132.     TEXT (x#/2+12.5)*char.width,(y#/3)*char.height+4,STR$(n(i))
  133.     psa#=ps#
  134.   NEXT i
  135. RETURN
  136. ' **********
  137. '
  138.